/*****************************************************************************
*                     Organizaci�n de Datos - 75.06                          *
*                         C�tedra Lic. Servetto                              *
*            Facultad de Ingenier�a - Universidad de Buenos Aires            *
******************************************************************************/ 

#include <string>
#include <iostream>
#include "Archivo.h"

using namespace std;

namespace Comun
{

	// ParserDeTipoRegistro

	TipoRegistro ParserDeTipoRegistro::Parsear(string tipo)
	{
		if (tipo == "Cadena")
			return Cadena;

		if (tipo == "Caracter")
			return Caracter;

		if (tipo == "Entero")
			return Entero;

		if (tipo == "EnteroLargo")
			return EnteroLargo;

		if (tipo == "Fecha")
			return Fecha;

		if (tipo == "Booleano")
			return Booleano;

		if (tipo == "Real")
			return Real;
		
		cerr << "Comun->Archivo.cpp->ParserDeTipoRegistro::Parsear(string tipo)" << endl << "No se puede parsear el tipo." << endl;
		throw new exception();		
	};

	TipoRegistro ParserDeTipoRegistro::Parsear(char tipo)
	{
		if (tipo == 'S')
			return Cadena;

		if (tipo == 'C')
			return Caracter;

		if (tipo == 'E')
			return Entero;

		if (tipo == 'L')
			return EnteroLargo;

		if (tipo == 'F')
			return Fecha;

		if (tipo == 'B')
			return Booleano;

		if (tipo == 'R')
			return Real;
		
		cerr << "Comun->Archivo.cpp->ParserDeTipoRegistro::Parsear(char tipo)" << endl << "No se puede parsear el tipo." << endl;
		throw new exception();
	};

	char ParserDeTipoRegistro::ConvertirACaracter(TipoRegistro tipo)
	{
		switch(tipo)
		{
			case Cadena:
				return 'S';

			case Caracter:
				return 'C';

			case Entero:
				return 'E';

			case EnteroLargo:
				return 'L';

			case Fecha:
				return 'F';

			case Booleano:
				return 'B';

			case Real:
				return 'R';

			default:
				cerr << "Comun->Archivo.cpp->ParserDeTipoRegistro::ConvertirACaracter(TipoRegistro tipo)" << endl << "No se puede pasar a char el tipo." << endl;
				throw new exception();
		}
	};
	string ParserDeTipoRegistro::Parsear(TipoRegistro tipo)
	{
		switch(tipo)
		{
			case Cadena:
				return "Cadena";

			case Caracter:
				return "Caracter";

			case Entero:
				return "Entero";

			case EnteroLargo:
				return "EnteroLargo";

			case Fecha:
				return "Fecha";
			
			case Booleano:
				return "Booleano";
			
			case Real:
				return "Real";
			
			default:
			cerr << "Comun->Archivo.cpp->ParserDeTipoRegistro::Parsear(TipoRegistro tipo)" << endl << "No se puede pasar a sting el tipo." << endl;
				throw new exception();
		}
	};

	// Atributo

	Atributo::Atributo()
	{
	};

	Atributo::Atributo(string nombre, string valor)
	{
		this->Nombre = nombre;
		this->Valor = valor;
	};

	Atributo::~Atributo()
	{
	};

	// Registro

	Registro::Registro() : Atributos( inicializadorAtributos )
	{
		Marcado = false;
		Tamanio = 0;
	};

	Registro::~Registro()
	{
	};

	bool Registro::operator ==(const Comun::Registro &comp) const{
		IteradorDeAtributos j = comp.Atributos.begin();
		
		for (IteradorDeAtributos i = Atributos.begin(); i != Atributos.end(); i++, j++)
			if ( !( (*i).Valor.compare((*j).Valor) == 0) )
				return false;

		return true;			
	}

	// Grupo

	Grupo::Grupo() : Atributos( inicializadorAtributos ), Registros( inicializadorRegistros )
	{
		GrupoId = -1;
	};

	Grupo::~Grupo()
	{
	};

	// MetadatosAtributo

	MetadatosAtributo::MetadatosAtributo(string nombre, TipoRegistro tipo)
	{
		this->Nombre = nombre;
		this->Tipo = tipo;
	};

	MetadatosAtributo::~MetadatosAtributo()
	{
	};

	// MetadatosRegistro

	MetadatosRegistro::MetadatosRegistro() : MetadatosAtributos( inicializadorMetadatosAtributos )
	{
	};

	MetadatosRegistro::~MetadatosRegistro()
	{
	};

	// MetadatosGrupo

	MetadatosGrupo::MetadatosGrupo() : MetadatosAtributos( inicializadorMetadatosAtributos )
	{
	};

	MetadatosGrupo::~MetadatosGrupo()
	{
	};

	// MetadatosArchivo

	MetadatosArchivo::MetadatosArchivo(string nombre)
	{
		this->Nombre = nombre;
		this->TamanioBloque = TamanioPredeterminado;
	};

	MetadatosArchivo::~MetadatosArchivo()
	{
	};

	

}
